package ar.uba.is2.common.mensaje.contenido;

import java.io.StringReader;
import java.util.Scanner;
import java.util.regex.Pattern;

import ar.uba.is2.common.loc.Coordenada;
import ar.uba.is2.common.mensaje.Contenido;

public class ContenidoSuscripcionDato implements Contenido {

	private static final Pattern DEFAULT_DELIMITER = Pattern.compile(",");
	
	private Identificador identificador;
	
	@Override
	public void deserializar(String serializedContent) {
		
		if (!serializedContent.startsWith("[") && serializedContent.endsWith("]")) {
			throw new RuntimeException(String.format("el string %s no puede deserializarse con %s",serializedContent, this.getClass()));
		}
		
		String datosStream = serializedContent.substring(1, serializedContent.length() - 1);
		
		Scanner scanner = new Scanner(new StringReader(datosStream));
		scanner.useDelimiter(DEFAULT_DELIMITER);

		String tDato = scanner.next();
		TipoDato tipoDato = TipoDato.valueOf(tDato);
		
		double latitud = scanner.nextDouble();
		double longitud = scanner.nextDouble();
		
		Coordenada coordenada = new Coordenada(latitud, longitud);
		
		String valor = scanner.next();
		
		this.identificador = new Identificador(tipoDato, coordenada, valor);

	}
	
	@Override
	public Identificador getContenido() {
		return this.identificador;
	}

	@Override
	public String serializar() {
		StringBuilder sb = new StringBuilder();
		sb.append("[").append(this.identificador.getTipoDato().name()).append(",").append(
				this.identificador.getCoordenada().getLatitud()).append(",").append(
				this.identificador.getCoordenada().getLongitud()).append(",").append(this.identificador.getValorIdentificador()).append("]");

		return sb.toString();
	}

	public void setIdentificador(Identificador identificador) {
		this.identificador = identificador;
	}

}
